package com.docmgmt.mvp.mapper;

import com.docmgmt.mvp.entity.FileTagEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * <p>
 * 文件标签关联表 Mapper 接口
 * </p>
 *
 * @author Dora
 */
@Mapper
public interface FileTagMapper extends BaseMapper<FileTagEntity> {

    /**
     * 查询文件-标签关联记录
     *
     * @param fileId 文件ID
     * @param tagId  标签ID
     * @return 关联实体
     */
    @Select("SELECT * FROM doc_file_tag WHERE file_id = #{fileId} AND tag_id = #{tagId} LIMIT 1")
    FileTagEntity selectByFileAndTag(@Param("fileId") Long fileId, @Param("tagId") Long tagId);

    /**
     * 删除文件的所有标签
     *
     * @param fileId 文件ID
     * @return 删除数量
     */
    @Delete("DELETE FROM doc_file_tag WHERE file_id = #{fileId}")
    int deleteByFileId(@Param("fileId") Long fileId);

    /**
     * 删除指定标签的所有关联
     *
     * @param tagId 标签ID
     * @return 删除数量
     */
    @Delete("DELETE FROM doc_file_tag WHERE tag_id = #{tagId}")
    int deleteByTagId(@Param("tagId") Long tagId);

    /**
     * 删除文件的某个标签
     *
     * @param fileId 文件ID
     * @param tagId  标签ID
     * @return 删除数量
     */
    @Delete("DELETE FROM doc_file_tag WHERE file_id = #{fileId} AND tag_id = #{tagId}")
    int deleteByFileAndTag(@Param("fileId") Long fileId, @Param("tagId") Long tagId);

    /**
     * 查询拥有指定标签的所有文件ID
     *
     * @param tagId 标签ID
     * @return 文件ID列表
     */
    @Select("SELECT file_id FROM doc_file_tag WHERE tag_id = #{tagId}")
    List<Long> selectFileIdsByTagId(@Param("tagId") Long tagId);
}
